home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / packet / p_aa4re / bb212src / bbstack.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-01-05  |  2.6 KB  |  132 lines

  1. UNIT BBSTACK;
  2.  
  3. INTERFACE
  4.  
  5. USES
  6.   bbdummy;
  7.  
  8. TYPE stack_key = STRING[10];
  9.  
  10. PROCEDURE stack_push(key : stack_key);
  11. PROCEDURE stack_test(key : stack_key);
  12. PROCEDURE stack_pop(key : stack_key);
  13. PROCEDURE stack_depth;
  14. PROCEDURE stack_record(this_tcb : tcb_ptr);
  15.  
  16. IMPLEMENTATION
  17.  
  18. USES
  19.   bbtrace;
  20.  
  21. {$UNDEF  POP}
  22. {$DEFINE DEPTH}
  23.  
  24. PROCEDURE stack_push(key : stack_key);
  25.  
  26.   BEGIN;
  27.  
  28.     {$IFDEF POP}
  29.  
  30.       IF active_tcb = NIL THEN EXIT;
  31.  
  32.       INC(active_tcb^.stack_cnt);
  33.       IF active_tcb^.stack_cnt <= 10 THEN
  34.         active_tcb^.stack_temp[active_tcb^.stack_cnt] := SPTR;
  35.  
  36.     {$ENDIF}
  37.  
  38.   END;
  39.  
  40. PROCEDURE stack_test(key : stack_key);
  41.   BEGIN;
  42.  
  43.     {$IFDEF POP}
  44.  
  45.       IF active_tcb = NIL THEN EXIT;
  46.  
  47.       IF active_tcb^.stack_cnt = 0 THEN
  48.         BEGIN;
  49.           WRITELN('Pop count = 0');
  50.           HALT;
  51.         END;
  52.  
  53.       IF (active_tcb^.stack_cnt <= 10) AND
  54.                  (active_tcb^.stack_temp[active_tcb^.stack_cnt] <> SPTR) THEN
  55.         BEGIN;
  56.           WRITELN('Stack Mismatch - ', key);
  57.           WRITELN('Expected = ',
  58.                               active_tcb^.stack_temp[active_tcb^.stack_cnt]);
  59.           WRITELN('Got = ', SPTR);
  60.           HALT;
  61.         END;
  62.  
  63.       {$ENDIF}
  64.  
  65.   END;
  66.  
  67. PROCEDURE stack_pop(key : stack_key);
  68.  
  69.   BEGIN;
  70.  
  71.     {$IFDEF POP}
  72.  
  73.       IF active_tcb = NIL THEN EXIT;
  74.  
  75.       IF active_tcb^.stack_cnt = 0 THEN
  76.         BEGIN;
  77.           WRITELN('Pop count = 0');
  78.           HALT;
  79.         END;
  80.  
  81.       IF (active_tcb^.stack_cnt <= 10) AND
  82.                  (active_tcb^.stack_temp[active_tcb^.stack_cnt] <> SPTR) THEN
  83.         BEGIN;
  84.           WRITELN('Stack Mismatch - ', key);
  85.           WRITELN('Expected = ',
  86.                               active_tcb^.stack_temp[active_tcb^.stack_cnt]);
  87.           WRITELN('Got = ', SPTR);
  88.           HALT;
  89.         END;
  90.  
  91.       DEC(active_tcb^.stack_cnt); *)
  92.  
  93.     {$ENDIF}
  94.  
  95.   END;
  96.  
  97. PROCEDURE stack_depth;
  98.   BEGIN;
  99.  
  100.     {$IFDEF DEPTH}
  101.  
  102.       IF active_tcb = NIL THEN EXIT;
  103.  
  104.       IF active_tcb^.stack_usage > SPTR THEN
  105.         BEGIN;
  106.           active_tcb^.stack_usage := SPTR;
  107.           IF SPTR < 1024 THEN
  108.             WRITELN('Stack space low -- ', active_tcb^.stack_usage,
  109.                                    ' -- ', active_tcb^.tcb_number,
  110.                                    ' -- ', active_tcb^.tcb_name);
  111.         END;
  112.  
  113.     {$ENDIF}
  114.  
  115.   END;
  116.  
  117. PROCEDURE stack_record(this_tcb : tcb_ptr);
  118.   BEGIN;
  119.  
  120.     {$IFDEF DEPTH}
  121.  
  122.       IF this_tcb = NIL THEN EXIT;
  123.  
  124.       trace_data('SR', this_tcb^.tcb_number,
  125.                                          PTR(SSEG, this_tcb^.stack_usage), '');
  126.  
  127.     {$ENDIF}
  128.  
  129.   END;
  130.  
  131. END.
  132.